home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Merciful 2
/
Merciful - Disc 2.iso
/
software
/
a
/
aplayerv1.3+keyfile.lha
/
APlayer
/
Files
/
Developer.lha
/
Examples
/
apFredLibrary.S
next >
Wrap
Text File
|
1994-09-20
|
7KB
|
362 lines
; $VER: Fred.library 2.1
;
INCDIR "Includes3.0:Include3.0/"
INCLUDE "Exec/Types.i"
INCLUDE "Own/SystemBases.i"
INCLUDE "Own/SystemStructures.i"
INCLUDE "Own/SystemOffsets.i"
INCLUDE "Own/AccessiblePlayer.i"
VERSION = 2
REVISION = 1
TRUE = -1
FALSE = 0
; Library Data
LN_Name = 10
LN_Type = 8
NT_Library = 9
LIBB_Summing = 0
LIBB_Changed = 1
LIBB_SumUsed = 2
LIBB_DelExp = 3
LIBF_Summing = 1<<LIBB_Summing
LIBF_Changed = 1<<LIBB_Changed
LIBF_SumUsed = 1<<LIBB_SumUsed
LIBF_DelExp = 1<<LIBB_DelExp
; Macros
INBYTE MACRO
dc.b %11100000,0
dc.w \1
dc.b \2,0
ENDM
INWORD MACRO
dc.b %11010000,0
dc.w \1,\2
ENDM
INLONG MACRO
dc.b %11000000,0
dc.w \1
dc.l \2
ENDM
; Library Base Structure
STRUCTURE LibraryStruct,0
STRUCT LIB_Node,14
UBYTE LIB_Flags
UBYTE LIB_Pad
UWORD LIB_NegSize
UWORD LIB_PosSize
UWORD LIB_Version
UWORD LIB_Revision
APTR LIB_IDString
ULONG LIB_Sum
UWORD LIB_OpenCnt
LONG LIB_SegList
LABEL LibraryStruct_SIZEOF
SECTION Fred.library,CODE
START moveq #0,d0
rts
;------------------------------------------------------------------------------
LIBNAME dc.b "apFred.library",0
LIBID dc.b "Fred.library 2.1 (18-September-1994)",0
even
;------------------------------------------------------------------------------
; ROMTAG Structure
;
ROMTAG dc.w $4afc ;ROMTAG Indentifier
dc.l romtag
dc.l slut
dc.b $80 ;Flags
dc.b version
dc.b $09 ;Type Of Module
dc.b $00 ;Initialization Priority
dc.l libname
dc.l libid
dc.l autinit ;Pointer To AUTOINIT Table
;------------------------------------------------------------------------------
; AUTOINIT Table
;
AUTINIT dc.l LibraryStruct_SIZEOF ;Size Of Structure AFTER Base Address
dc.l vector ;Pointer To Vector Table
dc.l inittab ;Pointer To Init Structure
dc.l init ;Pointer To Init Routine
;------------------------------------------------------------------------------
; Init Table
;
INITTAB INBYTE LN_Type,NT_Library
INBYTE LIB_Flags,LIBF_SumUsed!LIBF_Changed
INWORD LIB_Version,version
INWORD LIB_Revision,revision
INLONG LN_Name,libname
INLONG LIB_IDString,libid
dc.l 0
;------------------------------------------------------------------------------
; Vector Table
;
VECTOR dc.w -1
dc.w opnlib-vector,clslib-vector,expunge-vector,extfunc-vector
dc.w FP_GetTags-vector
dc.w -1
;------------------------------------------------------------------------------
; Init Routine
;
INIT movem.l d1-d7/a0-a6,-(sp)
move.l d0,a4 ;Base Address
move.l a0,LIB_SegList(a4)
move.l a4,d0
movem.l (sp)+,d1-d7/a0-a6
rts
;------------------------------------------------------------------------------
; Offset -6: Open Library
;
OPNLIB addq.w #1,LIB_OpenCnt(a6)
bclr #LIBB_DelExp,LIB_Flags(a6)
move.l a6,d0
rts
;------------------------------------------------------------------------------
; Offset -12: Close Library
;
CLSLIB moveq #0,d0
subq.w #1,LIB_OpenCnt(a6)
bne.b clslibo
btst #LIBB_DelExp,LIB_Flags(a6)
bne.b expunge
CLSLIBO rts
;------------------------------------------------------------------------------
; Offset -18: Expunge
;
EXPUNGE movem.l d1-d7/a0-a6,-(sp)
move.l a6,a4
tst.w LIB_OpenCnt(a4)
beq.b exp1
bset #LIBB_DelExp,LIB_Flags(a4)
moveq #0,d0
bra.b expungo
EXP1 move.l 4.w,a6
move.l LIB_SegList(a4),d2
move.l a4,a1
jsr Remove(a6)
move.l a4,a1
moveq #0,d0
move.w LIB_NegSize(a4),d0
sub.l d0,a1
add.w LIB_PosSize(a4),d0
jsr FreeMem(a6)
move.l d2,d0
EXPUNGO movem.l (sp)+,d1-d7/a0-a6
rts
;------------------------------------------------------------------------------
; Offset -24: ExtFunc
;
EXTFUNC moveq #0,d0
rts
;------------------------------------------------------------------------------
;******************************************************************************
;* Fred Player
;******************************************************************************
;------------------------------------------------------------------------------
; Offset -30: GetTags
;
; IN : Nothing
;
; OUT: A0 = Pointer To A TagList
;
FP_GetTags
lea FP_Tags(pc),a0
rts
FP_Tags dc.l APT_RequestVersion,2
dc.l APT_Check,FP_TestModule
dc.l APT_InitPlayer,FP_InitPlayer
dc.l APT_EndPlayer,FP_EndPlayer
dc.l APT_InitSound,FP_InitSound
dc.l APT_EndSound,FP_EndSound
dc.l APT_Interrupt,FP_PlayModule
dc.l APT_PlayerName,fpname
dc.l APT_Description,fpdes
dc.l APT_SubSong,FP_SubSong
dc.l APT_Pause,TRUE
dc.l TAG_END
FPNAME dc.b "Fred Player",0
FPDES dc.b "Original player by JC & Fred.",10
dc.b "Adapted by Tax.",0
even
;------------------------------------------------------------------------------
; TestModule
;
; IN : A1 = Address
;
; OUT: D0 = Success (0=Unknown, 1=Ok, 2=Error)
;
FP_TestModule
movem.l d1-d2/a1/a3,-(sp)
cmp.w #$4efa,(a1)
bne.b .tsmod3
cmp.w #$4efa,4(a1)
bne.b .tsmod3
cmp.w #$4efa,8(a1)
bne.b .tsmod3
cmp.w #$4efa,12(a1)
bne.b .tsmod3
moveq #0,d1
move.w 2(a1),d1
add.l d1,a1
moveq #4-1,d2
.TSMOD1 cmp.w #$123a,2(a1)
bne.b .tsmod2
cmp.w #$b001,6(a1)
beq.b .tsmod4
.TSMOD2 addq.l #2,a1
dbra d2,.tsmod1
.TSMOD3 moveq #0,d0 ;Unknown
bra.b .tsmodo
.TSMOD4 move.w 4(a1),d1
add.l d1,a1
moveq #0,d1
move.b 4(a1),d1
addq.w #1,d1
move.w d1,maxtune
moveq #1,d0 ;Ok
.TSMODO movem.l (sp)+,d1-d2/a1/a3
rts
;------------------------------------------------------------------------------
; InitPlayer
;
; IN : A1 = Address
;
; OUT: D1 = Success (0=Error)
;
FP_InitPlayer
movem.l d0/a0,-(sp)
move.l APG_AllocChannels(a5),a0
jsr (a0)
move.l d0,d1
movem.l (sp)+,d0/a0
rts
;------------------------------------------------------------------------------
; EndPlayer
;
; IN : A1 = Address
;
; OUT: Nothing
;
FP_EndPlayer
move.l a0,-(sp)
move.l APG_FreeChannels(a5),a0
jsr (a0)
move.l (sp)+,a0
rts
;------------------------------------------------------------------------------
; InitSound
;
; IN : A1 = Address
;
; OUT: Nothing
;
FP_InitSound
movem.l d0-d7/a0-a6,-(sp)
move.w APG_Tune(a5),d0
ext.l d0
jsr (a1) ;Init Module
movem.l (sp)+,d0-d7/a0-a6
rts
;------------------------------------------------------------------------------
; EndSound
;
; IN : A1 = Address
;
; OUT: Nothing
;
FP_EndSound
movem.l d0-d7/a0-a6,-(sp)
moveq #0,d1
jsr 8(a1) ;Stop Module Playing
moveq #0,d0
move.w d0,$dff0a8
move.w d0,$dff0b8
move.w d0,$dff0c8
move.w d0,$dff0d8
movem.l (sp)+,d0-d7/a0-a6
rts
;------------------------------------------------------------------------------
; PlayModule
;
; IN : A1 = Address
; D1 = VBlank/Cia (0=CIA)
;
; OUT: Nothing
;
FP_PlayModule
movem.l d0-d7/a0-a6,-(sp)
jsr 4(a1) ;Play Module
movem.l (sp)+,d0-d7/a0-a6
rts
;------------------------------------------------------------------------------
; SubSong
;
; IN : A1 = Address
;
; OUT: A0 = Pointer To Two SubSongs Words
;
FP_SubSong
lea maxtune(pc),a0
rts
MAXTUNE dc.w 0,0
;------------------------------------------------------------------------------
SLUT